package com.huida.app.hutoolsusage;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.RandomUtil;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Set;

/**
 * @author wangzhuangzhuang
 * @DESC: 随机工具
 * @date 2022-01-11 09:13
 */
@SpringBootTest
public class RandomUtilUsageDemo {
	/**
	 * RandomUtil针对JDK中Random对象进行封装
	 * Java产生的随机数都是伪随机数
	 * 随机结果对绝大多数场景够用
	 * */

	// 使用RandomUtil.randomInt 获得指定范围内的随机数
	// 产生一个[10, 100]的随机数
	@Test
	public void test01(){
		int c = RandomUtil.randomInt(10, 100);
		System.out.println("c: " + c);
	}

	// 使用RandomUtil.randomBytes随机bytes，一般用于密码或salt生成
	@Test
	public void test02(){
		byte[] c = RandomUtil.randomBytes(10);
		System.out.println(ArrayUtil.toString(c));
	}

	// 使用RandomUtil.randomEle随机获得列表中的元素
	@Test
	public void test03(){
		Integer randomEleInTheList = RandomUtil.randomEle(CollUtil.newArrayList(1, 2, 3, 4, 5, 6), 2);
		System.out.println("randomEleInTheList: " + randomEleInTheList); // randomEleInTheList: 2

		Set<Integer> randomEleSet = RandomUtil.randomEleSet(CollUtil.newArrayList(1, 2, 3, 4, 5, 6), 2);
		System.out.println("randomEleSet: " + ArrayUtil.toString(randomEleSet)); // randomEleSet: [6, 3]
	}

	// RandomUtil.randomString 获得一个随机的字符串（只包含数字和字符）
	// RandomUtil.randomNumbers 获得一个只包含数字的字符串
	// RandomUtil.weightRandom 权重随机生成器，传入带权重的对象，然后根据权重随机获取对象
	@Test
	public void test04(){
		String s = RandomUtil.randomString(6);
		// randomString: gh8n21
		System.out.println("randomString: " + s);

		String s1 = RandomUtil.randomNumbers(6);
		// randomNumbers: 038697
		System.out.println("randomNumbers: " + s1);
	}


}